
// Definition for singly-linked list.
struct ListNode
{
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};
//更优解
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        //空链表
        if(head==nullptr)return head;
        ListNode*cur=head;
        ListNode*pev=nullptr;
        while(cur){
            ListNode*next=cur->next;
            cur->next=pev;
            pev=cur;
            cur=next;
        }
        return pev;
    }
};
// class Solution
// {
// public:
//     ListNode *reverseList(ListNode *head)
//     {
//         // 空链表
//         if (head == nullptr)
//             return head;
//         ListNode *cur = head->next;
//         // 一个节点
//         if (cur == nullptr)
//         {
//             head->next = nullptr;
//             return head;
//         }
//         ListNode *pev = head;
//         ListNode *next = cur->next;
//         // 两个节点
//         if (next == nullptr)
//         {
//             pev->next = nullptr;
//             cur->next = pev;
//             return cur;
//         }
//         // 三个节点及以上
//         pev->next = nullptr;
//         while (next)
//         {
//             next = cur->next;
//             cur->next = pev;
//             pev = cur;
//             cur = next;
//         }
//         return pev;
//     }
// };